package com.demo.persistencia.generica.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.util.List;
import java.util.Map;

import com.demo.persistencia.generica.exception.BadUpdateException;
import com.demo.persistencia.generica.exception.DaoException;
import com.demo.persistencia.generica.exception.NotFoundException;
import com.demo.persistencia.generica.util.Busqueda;

public interface GenericDao<K, T> {
	
	public abstract Connection getConnection() throws DaoException;
	
	public abstract void eliminar(K objeto)  throws NotFoundException,BadUpdateException;

	public abstract K insertar(K objeto) throws BadUpdateException;

	public abstract K modificar(K objeto) throws BadUpdateException;
	
	public abstract List<K> buscarDinamico(final Busqueda filtro) throws NotFoundException;

	@SuppressWarnings("rawtypes")
	public abstract K buscarById(Class clazz, Serializable id) throws NotFoundException;

	public abstract Object getCallProcedimiento( final String nombreProcedimiento, final Map<String, Object> parametros);
	
}
